๊ฐ๋น์ง ์ปฌ๋ ์ ์ ์ด์ ์ ๋ง์ถฐ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ์ ์ธ๊ณ๋ฅผ ํ์ํด ๋ณด์ธ์. ์ด ๊ฐ์ด๋๋ ๋ค์ํ GC ์ ๋ต, ์ฅ๋จ์ , ๊ทธ๋ฆฌ๊ณ ์ ์ธ๊ณ ๊ฐ๋ฐ์๋ฅผ ์ํ ์ค์ง์ ์ธ ์ํฅ์ ๋ค๋ฃน๋๋ค.
๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ: ๊ฐ๋น์ง ์ปฌ๋ ์ ์ ๋ต์ ๋ํ ์ฌ์ธต ํ๊ตฌ
๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ๋ ์ํํธ์จ์ด ๊ฐ๋ฐ์ ์ค์ํ ์ธก๋ฉด์ผ๋ก, ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฑ๋ฅ, ์์ ์ฑ, ํ์ฅ์ฑ์ ์ง์ ์ ์ธ ์ํฅ์ ๋ฏธ์นฉ๋๋ค. ํจ์จ์ ์ธ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ด ๋ฆฌ์์ค๋ฅผ ํจ๊ณผ์ ์ผ๋ก ์ฌ์ฉํ๋๋ก ๋ณด์ฅํ์ฌ ๋ฉ๋ชจ๋ฆฌ ๋์์ ์ถฉ๋์ ๋ฐฉ์งํฉ๋๋ค. C๋ C++์ ๊ฐ์ ์ธ์ด์์์ ์๋ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ๋ ์ธ๋ฐํ ์ ์ด๋ฅผ ์ ๊ณตํ์ง๋ง, ์ฌ๊ฐํ ๋ฌธ์ ๋ก ์ด์ด์ง ์ ์๋ ์ค๋ฅ์ ์ทจ์ฝํฉ๋๋ค. ์๋ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ, ํนํ ๊ฐ๋น์ง ์ปฌ๋ ์ (GC)์ ํตํ ๊ด๋ฆฌ๋ ๋ ์์ ํ๊ณ ํธ๋ฆฌํ ๋์์ ์ ๊ณตํฉ๋๋ค. ์ด ๊ธ์์๋ ๊ฐ๋น์ง ์ปฌ๋ ์ ์ ์ธ๊ณ๋ฅผ ๊น์ด ํ๊ณ ๋ค์ด ๋ค์ํ ์ ๋ต๊ณผ ๊ทธ๊ฒ์ด ์ ์ธ๊ณ ๊ฐ๋ฐ์์๊ฒ ๋ฏธ์น๋ ์ํฅ์ ํ๊ตฌํฉ๋๋ค.
๊ฐ๋น์ง ์ปฌ๋ ์ ์ด๋ ๋ฌด์์ธ๊ฐ?
๊ฐ๋น์ง ์ปฌ๋ ์ ์ ์๋ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ์ ํ ํํ๋ก, ๊ฐ๋น์ง ์ปฌ๋ ํฐ๊ฐ ํ๋ก๊ทธ๋จ์์ ๋ ์ด์ ์ฌ์ฉ๋์ง ์๋ ๊ฐ์ฒด๊ฐ ์ฐจ์งํ๋ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ์ํ๋ ค๋ ์๋์ ๋๋ค. "๊ฐ๋น์ง"๋ผ๋ ์ฉ์ด๋ ํ๋ก๊ทธ๋จ์ด ๋ ์ด์ ๋๋ฌํ๊ฑฐ๋ ์ฐธ์กฐํ ์ ์๋ ๊ฐ์ฒด๋ฅผ ์๋ฏธํฉ๋๋ค. GC์ ์ฃผ์ ๋ชฉํ๋ ์ฌ์ฌ์ฉ์ ์ํด ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํด์ ํ์ฌ ๋ฉ๋ชจ๋ฆฌ ๋์๋ฅผ ๋ฐฉ์งํ๊ณ ๊ฐ๋ฐ์์ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ ์์ ์ ๋จ์ํํ๋ ๊ฒ์ ๋๋ค. ์ด ์ถ์ํ๋ ๊ฐ๋ฐ์๊ฐ ๋ช ์์ ์ผ๋ก ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ ๋นํ๊ณ ํด์ ํ๋ ์์ ์์ ๋ฒ์ด๋๊ฒ ํ์ฌ ์ค๋ฅ์ ์ํ์ ์ค์ด๊ณ ๊ฐ๋ฐ ์์ฐ์ฑ์ ํฅ์์ํต๋๋ค. ๊ฐ๋น์ง ์ปฌ๋ ์ ์ Java, C#, Python, JavaScript, Go๋ฅผ ํฌํจํ ๋ง์ ํ๋ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์ ์ค์ํ ๊ตฌ์ฑ ์์์ ๋๋ค.
๊ฐ๋น์ง ์ปฌ๋ ์ ์ ์ ์ค์ํ๊ฐ?
๊ฐ๋น์ง ์ปฌ๋ ์ ์ ์ํํธ์จ์ด ๊ฐ๋ฐ์์ ์ฌ๋ฌ ์ค์ํ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํฉ๋๋ค:
- ๋ฉ๋ชจ๋ฆฌ ๋์ ๋ฐฉ์ง: ๋ฉ๋ชจ๋ฆฌ ๋์๋ ํ๋ก๊ทธ๋จ์ด ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ ๋นํ ํ ๋ ์ด์ ํ์ํ์ง ์์ ๋ ํด์ ํ์ง ๋ชปํ ๋ ๋ฐ์ํฉ๋๋ค. ์๊ฐ์ด ์ง๋จ์ ๋ฐ๋ผ ์ด๋ฌํ ๋์๋ ์ฌ์ฉ ๊ฐ๋ฅํ ๋ชจ๋ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์๋ชจํ์ฌ ์ ํ๋ฆฌ์ผ์ด์ ์ถฉ๋์ด๋ ์์คํ ๋ถ์์ ์ ์ด๋ํ ์ ์์ต๋๋ค. GC๋ ์ฌ์ฉ๋์ง ์๋ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์๋์ผ๋ก ํ์ํ์ฌ ๋ฉ๋ชจ๋ฆฌ ๋์์ ์ํ์ ์ํํฉ๋๋ค.
- ๊ฐ๋ฐ ๋จ์ํ: ์๋ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ๋ ๊ฐ๋ฐ์๊ฐ ๋ฉ๋ชจ๋ฆฌ ํ ๋น๊ณผ ํด์ ๋ฅผ ๊ผผ๊ผผํ๊ฒ ์ถ์ ํด์ผ ํฉ๋๋ค. ์ด ๊ณผ์ ์ ์ค๋ฅ๊ฐ ๋ฐ์ํ๊ธฐ ์ฝ๊ณ ์๊ฐ์ด ๋ง์ด ์์๋ ์ ์์ต๋๋ค. GC๋ ์ด ๊ณผ์ ์ ์๋ํํ์ฌ ๊ฐ๋ฐ์๊ฐ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ ์ธ๋ถ ์ฌํญ๋ณด๋ค๋ ์ ํ๋ฆฌ์ผ์ด์ ๋ก์ง์ ์ง์คํ ์ ์๋๋ก ํฉ๋๋ค.
- ์ ํ๋ฆฌ์ผ์ด์ ์์ ์ฑ ํฅ์: ์ฌ์ฉ๋์ง ์๋ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์๋์ผ๋ก ํ์ํจ์ผ๋ก์จ GC๋ ์์ธกํ ์ ์๋ ์ ํ๋ฆฌ์ผ์ด์ ๋์ ๋ฐ ์ถฉ๋์ ์ ๋ฐํ ์ ์๋ ๋๊ธ๋ง ํฌ์ธํฐ๋ ์ด์ค ํด์ ์ค๋ฅ์ ๊ฐ์ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ จ ์ค๋ฅ๋ฅผ ๋ฐฉ์งํ๋ ๋ฐ ๋์์ด ๋ฉ๋๋ค.
- ์ฑ๋ฅ ํฅ์: GC๋ ์ฝ๊ฐ์ ์ค๋ฒํค๋๋ฅผ ์ ๋ฐํ์ง๋ง, ํ ๋น์ ์ถฉ๋ถํ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ฌ์ฉํ ์ ์๋๋ก ๋ณด์ฅํ๊ณ ๋ฉ๋ชจ๋ฆฌ ๋จํธํ ๊ฐ๋ฅ์ฑ์ ์ค์์ผ๋ก์จ ์ ๋ฐ์ ์ธ ์ ํ๋ฆฌ์ผ์ด์ ์ฑ๋ฅ์ ํฅ์์ํฌ ์ ์์ต๋๋ค.
์ผ๋ฐ์ ์ธ ๊ฐ๋น์ง ์ปฌ๋ ์ ์ ๋ต
์ฌ๋ฌ ๊ฐ๋น์ง ์ปฌ๋ ์ ์ ๋ต์ด ์กด์ฌํ๋ฉฐ, ๊ฐ๊ธฐ ๋ค๋ฅธ ์ฅ๋จ์ ์ ๊ฐ์ง๋๋ค. ์ ๋ต์ ์ ํ์ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด, ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ ํจํด, ์ฑ๋ฅ ์๊ตฌ ์ฌํญ๊ณผ ๊ฐ์ ์์ธ์ ๋ฐ๋ผ ๋ฌ๋ผ์ง๋๋ค. ๋ค์์ ๊ฐ์ฅ ์ผ๋ฐ์ ์ธ GC ์ ๋ต๋ค์ ๋๋ค:
1. ์ฐธ์กฐ ์นด์ดํ (Reference Counting)
์๋ ๋ฐฉ์: ์ฐธ์กฐ ์นด์ดํ ์ ๊ฐ ๊ฐ์ฒด๊ฐ ์์ ์ ๊ฐ๋ฆฌํค๋ ์ฐธ์กฐ์ ์๋ฅผ ์ ์งํ๋ ๊ฐ๋จํ GC ์ ๋ต์ ๋๋ค. ๊ฐ์ฒด๊ฐ ์์ฑ๋๋ฉด ์ฐธ์กฐ ์นด์ดํธ๋ 1๋ก ์ด๊ธฐํ๋ฉ๋๋ค. ๊ฐ์ฒด์ ๋ํ ์๋ก์ด ์ฐธ์กฐ๊ฐ ์์ฑ๋๋ฉด ์นด์ดํธ๊ฐ ์ฆ๊ฐํ๊ณ , ์ฐธ์กฐ๊ฐ ์ ๊ฑฐ๋๋ฉด ์นด์ดํธ๊ฐ ๊ฐ์ํฉ๋๋ค. ์ฐธ์กฐ ์นด์ดํธ๊ฐ 0์ด ๋๋ฉด ํ๋ก๊ทธ๋จ์ ๋ค๋ฅธ ์ด๋ค ๊ฐ์ฒด๋ ํด๋น ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ์ง ์๋๋ค๋ ์๋ฏธ์ด๋ฏ๋ก ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์์ ํ๊ฒ ํ์ํ ์ ์์ต๋๋ค.
์ฅ์ :
- ๊ตฌํ์ด ๊ฐ๋จํจ: ์ฐธ์กฐ ์นด์ดํ ์ ๋ค๋ฅธ GC ์๊ณ ๋ฆฌ์ฆ์ ๋นํด ์๋์ ์ผ๋ก ๊ตฌํ์ด ๊ฐ๋จํฉ๋๋ค.
- ์ฆ๊ฐ์ ์ธ ํ์: ๊ฐ์ฒด์ ์ฐธ์กฐ ์นด์ดํธ๊ฐ 0์ด ๋๋ ์ฆ์ ๋ฉ๋ชจ๋ฆฌ๊ฐ ํ์๋์ด ์ ์ํ ๋ฆฌ์์ค ํด์ ๋ก ์ด์ด์ง๋๋ค.
- ๊ฒฐ์ ๋ก ์ ๋์: ๋ฉ๋ชจ๋ฆฌ ํ์ ์์ ์ด ์์ธก ๊ฐ๋ฅํ์ฌ ์ค์๊ฐ ์์คํ ์์ ์ ์ฉํ ์ ์์ต๋๋ค.
๋จ์ :
- ์ํ ์ฐธ์กฐ๋ฅผ ์ฒ๋ฆฌํ ์ ์์: ๋ ๊ฐ ์ด์์ ๊ฐ์ฒด๊ฐ ์๋ก๋ฅผ ์ฐธ์กฐํ์ฌ ์ํ ๊ตฌ์กฐ๋ฅผ ํ์ฑํ๋ฉด, ํ๋ก๊ทธ๋จ์ ๋ฃจํธ์์ ๋ ์ด์ ๋๋ฌํ ์ ์๋๋ผ๋ ์ฐธ์กฐ ์นด์ดํธ๊ฐ ๊ฒฐ์ฝ 0์ด ๋์ง ์์ต๋๋ค. ์ด๋ ๋ฉ๋ชจ๋ฆฌ ๋์๋ก ์ด์ด์ง ์ ์์ต๋๋ค.
- ์ฐธ์กฐ ์นด์ดํธ ์ ์ง ์ค๋ฒํค๋: ์ฐธ์กฐ ์นด์ดํธ๋ฅผ ์ฆ๊ฐ์ํค๊ณ ๊ฐ์์ํค๋ ๊ฒ์ ๋ชจ๋ ํ ๋น ์์ ์ ์ค๋ฒํค๋๋ฅผ ์ถ๊ฐํฉ๋๋ค.
- ์ค๋ ๋ ์์ ์ฑ ๋ฌธ์ : ๋ค์ค ์ค๋ ๋ ํ๊ฒฝ์์ ์ฐธ์กฐ ์นด์ดํธ๋ฅผ ์ ์งํ๋ ค๋ฉด ๋๊ธฐํ ๋ฉ์ปค๋์ฆ์ด ํ์ํ๋ฉฐ, ์ด๋ ์ค๋ฒํค๋๋ฅผ ๋์ฑ ์ฆ๊ฐ์ํฌ ์ ์์ต๋๋ค.
์์: Python์ ์๋ ๋์ ์ฐธ์กฐ ์นด์ดํ ์ ์ฃผ์ GC ๋ฉ์ปค๋์ฆ์ผ๋ก ์ฌ์ฉํ์ต๋๋ค. ๊ทธ๋ฌ๋ ์ํ ์ฐธ์กฐ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ๋ณ๋์ ์ํ ํ์ง๊ธฐ๋ฅผ ํฌํจํ๊ณ ์์ต๋๋ค.
2. ๋งํฌ ์ค ์ค์ (Mark and Sweep)
์๋ ๋ฐฉ์: ๋งํฌ ์ค ์ค์์ ๋ ๋จ๊ณ๋ก ๊ตฌ์ฑ๋ ๋ ์ ๊ตํ GC ์ ๋ต์ ๋๋ค:
- ๋งํฌ(Mark) ๋จ๊ณ: ๊ฐ๋น์ง ์ปฌ๋ ํฐ๋ ๋ฃจํธ ๊ฐ์ฒด(์: ์ ์ญ ๋ณ์, ์คํ์ ์ง์ญ ๋ณ์) ์งํฉ์์ ์์ํ์ฌ ๊ฐ์ฒด ๊ทธ๋ํ๋ฅผ ์ํํฉ๋๋ค. ๋๋ฌ ๊ฐ๋ฅํ ๋ชจ๋ ๊ฐ์ฒด๋ฅผ "์ด์์์"์ผ๋ก ํ์ํฉ๋๋ค.
- ์ค์(Sweep) ๋จ๊ณ: ๊ฐ๋น์ง ์ปฌ๋ ํฐ๋ ์ ์ฒด ํ์ ์ค์บํ์ฌ "์ด์์์"์ผ๋ก ํ์๋์ง ์์ ๊ฐ์ฒด๋ฅผ ์๋ณํฉ๋๋ค. ์ด๋ฌํ ๊ฐ์ฒด๋ ๊ฐ๋น์ง๋ก ๊ฐ์ฃผ๋์ด ๋ฉ๋ชจ๋ฆฌ๊ฐ ํ์๋ฉ๋๋ค.
์ฅ์ :
- ์ํ ์ฐธ์กฐ ์ฒ๋ฆฌ: ๋งํฌ ์ค ์ค์์ ์ํ ์ฐธ์กฐ์ ๊ด๋ จ๋ ๊ฐ์ฒด๋ฅผ ์ ํํ๊ฒ ์๋ณํ๊ณ ํ์ํ ์ ์์ต๋๋ค.
- ํ ๋น ์ ์ค๋ฒํค๋ ์์: ์ฐธ์กฐ ์นด์ดํ ๊ณผ ๋ฌ๋ฆฌ ๋งํฌ ์ค ์ค์์ ํ ๋น ์์ ์ ์ค๋ฒํค๋๊ฐ ํ์ํ์ง ์์ต๋๋ค.
๋จ์ :
- '์ธ์์ ๋ฉ์ถ๋' ์ค๋จ (Stop-the-World Pauses): ๋งํฌ ์ค ์ค์ ์๊ณ ๋ฆฌ์ฆ์ ์ผ๋ฐ์ ์ผ๋ก ๊ฐ๋น์ง ์ปฌ๋ ํฐ๊ฐ ์คํ๋๋ ๋์ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ผ์ ์ค์งํด์ผ ํฉ๋๋ค. ์ด๋ฌํ ์ค๋จ์ ํนํ ๋ํํ ์ ํ๋ฆฌ์ผ์ด์ ์์ ๋์ ๋๊ณ ๋ฐฉํด๊ฐ ๋ ์ ์์ต๋๋ค.
- ๋ฉ๋ชจ๋ฆฌ ๋จํธํ: ๋ฐ๋ณต์ ์ธ ํ ๋น๊ณผ ํด์ ๋ ์๊ฐ์ด ์ง๋จ์ ๋ฐ๋ผ ๋ฉ๋ชจ๋ฆฌ ๋จํธํ๋ฅผ ์ด๋ํ ์ ์์ผ๋ฉฐ, ์ด๋ก ์ธํด ์ฌ์ ๋ฉ๋ชจ๋ฆฌ๊ฐ ์๊ณ ๋น์ฐ์์ ์ธ ๋ธ๋ก์ผ๋ก ํฉ์ด์ง๊ฒ ๋ฉ๋๋ค. ์ด๋ ํฐ ๊ฐ์ฒด๋ฅผ ํ ๋นํ๊ธฐ ์ด๋ ต๊ฒ ๋ง๋ค ์ ์์ต๋๋ค.
- ์๊ฐ์ด ๋ง์ด ์์๋ ์ ์์: ์ ์ฒด ํ์ ์ค์บํ๋ ๊ฒ์ ํนํ ํฐ ํ์ ๊ฒฝ์ฐ ์๊ฐ์ด ๋ง์ด ๊ฑธ๋ฆด ์ ์์ต๋๋ค.
์์: Java(์ผ๋ถ ๊ตฌํ์์), JavaScript, Ruby๋ฅผ ํฌํจํ ๋ง์ ์ธ์ด๊ฐ GC ๊ตฌํ์ ์ผ๋ถ๋ก ๋งํฌ ์ค ์ค์์ ์ฌ์ฉํฉ๋๋ค.
3. ์ธ๋๋ณ ๊ฐ๋น์ง ์ปฌ๋ ์ (Generational Garbage Collection)
์๋ ๋ฐฉ์: ์ธ๋๋ณ ๊ฐ๋น์ง ์ปฌ๋ ์ ์ ๋๋ถ๋ถ์ ๊ฐ์ฒด๊ฐ ์งง์ ์๋ช ์ ๊ฐ์ง๋ค๋ ๊ด์ฐฐ์ ๊ธฐ๋ฐํฉ๋๋ค. ์ด ์ ๋ต์ ํ์ ์ฌ๋ฌ ์ธ๋, ์ผ๋ฐ์ ์ผ๋ก ๋์ธ ๊ฐ๋ก ๋๋๋๋ค:
- ์ ์ ๋๋ ์ด์ (Young Generation): ์๋ก ์์ฑ๋ ๊ฐ์ฒด๋ฅผ ํฌํจํฉ๋๋ค. ์ด ์ธ๋๋ ์์ฃผ ๊ฐ๋น์ง ์ปฌ๋ ์ ๋ฉ๋๋ค.
- ์ฌ๋ ์ ๋๋ ์ด์ (Old Generation): ์ ์ ๋๋ ์ด์ ์์ ์ฌ๋ฌ ๋ฒ์ ๊ฐ๋น์ง ์ปฌ๋ ์ ์ฃผ๊ธฐ์์ ์ด์๋จ์ ๊ฐ์ฒด๋ฅผ ํฌํจํฉ๋๋ค. ์ด ์ธ๋๋ ๋ ์์ฃผ ๊ฐ๋น์ง ์ปฌ๋ ์ ๋ฉ๋๋ค.
- ํผ๋จธ๋ํธ ์ ๋๋ ์ด์ (Permanent Generation) (๋๋ ๋ฉํ์คํ์ด์ค): (์ผ๋ถ JVM ๊ตฌํ์์) ํด๋์ค ๋ฐ ๋ฉ์๋์ ๋ํ ๋ฉํ๋ฐ์ดํฐ๋ฅผ ํฌํจํฉ๋๋ค.
์ ์ ๋๋ ์ด์ ์ด ๊ฐ๋ ์ฐจ๋ฉด ๋ง์ด๋ ๊ฐ๋น์ง ์ปฌ๋ ์ ์ด ์ํ๋์ด ์ฃฝ์ ๊ฐ์ฒด๊ฐ ์ฐจ์งํ๋ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ์ํฉ๋๋ค. ๋ง์ด๋ ์ปฌ๋ ์ ์์ ์ด์๋จ์ ๊ฐ์ฒด๋ ์ฌ๋ ์ ๋๋ ์ด์ ์ผ๋ก ์น๊ฒฉ๋ฉ๋๋ค. ์ฌ๋ ์ ๋๋ ์ด์ ์ ์์งํ๋ ๋ฉ์ด์ ๊ฐ๋น์ง ์ปฌ๋ ์ ์ ๋ ์์ฃผ ์ํ๋๋ฉฐ ์ผ๋ฐ์ ์ผ๋ก ๋ ๋ง์ ์๊ฐ์ด ์์๋ฉ๋๋ค.
์ฅ์ :
- ์ค๋จ ์๊ฐ ๊ฐ์: ๋๋ถ๋ถ์ ๊ฐ๋น์ง๊ฐ ํฌํจ๋ ์ ์ ๋๋ ์ด์ ์์ง์ ์ง์คํจ์ผ๋ก์จ ์ธ๋๋ณ GC๋ ๊ฐ๋น์ง ์ปฌ๋ ์ ์ค๋จ ์๊ฐ์ ์ค์ ๋๋ค.
- ์ฑ๋ฅ ํฅ์: ์ ์ ๋๋ ์ด์ ์ ๋ ์์ฃผ ์์งํจ์ผ๋ก์จ ์ธ๋๋ณ GC๋ ์ ๋ฐ์ ์ธ ์ ํ๋ฆฌ์ผ์ด์ ์ฑ๋ฅ์ ํฅ์์ํฌ ์ ์์ต๋๋ค.
๋จ์ :
- ๋ณต์ก์ฑ: ์ธ๋๋ณ GC๋ ์ฐธ์กฐ ์นด์ดํ ์ด๋ ๋งํฌ ์ค ์ค์๊ณผ ๊ฐ์ ๊ฐ๋จํ ์ ๋ต๋ณด๋ค ๊ตฌํํ๊ธฐ๊ฐ ๋ ๋ณต์กํฉ๋๋ค.
- ํ๋ ํ์: ์ฑ๋ฅ์ ์ต์ ํํ๋ ค๋ฉด ์ธ๋์ ํฌ๊ธฐ์ ๊ฐ๋น์ง ์ปฌ๋ ์ ๋น๋๋ฅผ ์ ์คํ๊ฒ ์กฐ์ ํด์ผ ํฉ๋๋ค.
์์: Java์ HotSpot JVM์ ์ธ๋๋ณ ๊ฐ๋น์ง ์ปฌ๋ ์ ์ ๊ด๋ฒ์ํ๊ฒ ์ฌ์ฉํ๋ฉฐ, G1(Garbage First) ๋ฐ CMS(Concurrent Mark Sweep)์ ๊ฐ์ ๋ค์ํ ๊ฐ๋น์ง ์ปฌ๋ ํฐ๊ฐ ๋ค๋ฅธ ์ธ๋๋ณ ์ ๋ต์ ๊ตฌํํฉ๋๋ค.
4. ๋ณต์ฌ ๊ฐ๋น์ง ์ปฌ๋ ์ (Copying Garbage Collection)
์๋ ๋ฐฉ์: ๋ณต์ฌ ๊ฐ๋น์ง ์ปฌ๋ ์ ์ ํ์ ๋ ๊ฐ์ ๋์ผํ ํฌ๊ธฐ์ ์์ญ, ์ฆ from-space์ to-space๋ก ๋๋๋๋ค. ๊ฐ์ฒด๋ ์ฒ์์ from-space์ ํ ๋น๋ฉ๋๋ค. from-space๊ฐ ๊ฐ๋ ์ฐจ๋ฉด ๊ฐ๋น์ง ์ปฌ๋ ํฐ๋ ๋ชจ๋ ์ด์์๋ ๊ฐ์ฒด๋ฅผ from-space์์ to-space๋ก ๋ณต์ฌํฉ๋๋ค. ๋ณต์ฌ ํ from-space๋ ์๋ก์ด to-space๊ฐ ๋๊ณ , to-space๋ ์๋ก์ด from-space๊ฐ ๋ฉ๋๋ค. ์ด์ from-space๋ ์ด์ ๋น์ด ์๊ณ ์๋ก์ด ํ ๋น์ ์ํด ์ค๋น๋ฉ๋๋ค.
์ฅ์ :
- ๋จํธํ ์ ๊ฑฐ: ๋ณต์ฌ GC๋ ์ด์์๋ ๊ฐ์ฒด๋ฅผ ์ฐ์์ ์ธ ๋ฉ๋ชจ๋ฆฌ ๋ธ๋ก์ผ๋ก ์์ถํ์ฌ ๋ฉ๋ชจ๋ฆฌ ๋จํธํ๋ฅผ ์ ๊ฑฐํฉ๋๋ค.
- ๊ตฌํ์ด ๊ฐ๋จํจ: ๊ธฐ๋ณธ ๋ณต์ฌ GC ์๊ณ ๋ฆฌ์ฆ์ ์๋์ ์ผ๋ก ๊ตฌํ์ด ๊ฐ๋จํฉ๋๋ค.
๋จ์ :
- ์ฌ์ฉ ๊ฐ๋ฅํ ๋ฉ๋ชจ๋ฆฌ ์ ๋ฐ ๊ฐ์: ๋ณต์ฌ GC๋ ํ์ ์ ๋ฐ์ด ํญ์ ์ฌ์ฉ๋์ง ์๊ธฐ ๋๋ฌธ์ ์ค์ ๋ก ๊ฐ์ฒด๋ฅผ ์ ์ฅํ๋ ๋ฐ ํ์ํ ๋ฉ๋ชจ๋ฆฌ์ ๋ ๋ฐฐ๋ฅผ ํ์๋ก ํฉ๋๋ค.
- '์ธ์์ ๋ฉ์ถ๋' ์ค๋จ: ๋ณต์ฌ ๊ณผ์ ์ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ผ์ ์ค์งํด์ผ ํ๋ฏ๋ก ๋์ ๋๋ ์ค๋จ์ ์ ๋ฐํ ์ ์์ต๋๋ค.
์์: ๋ณต์ฌ GC๋ ์ข ์ข ๋ค๋ฅธ GC ์ ๋ต๊ณผ ํจ๊ป ์ฌ์ฉ๋๋ฉฐ, ํนํ ์ธ๋๋ณ ๊ฐ๋น์ง ์ปฌ๋ ํฐ์ ์ ์ ๋๋ ์ด์ ์์ ์ฌ์ฉ๋ฉ๋๋ค.
5. ๋์์ฑ ๋ฐ ๋ณ๋ ฌ ๊ฐ๋น์ง ์ปฌ๋ ์ (Concurrent and Parallel Garbage Collection)
์๋ ๋ฐฉ์: ์ด๋ฌํ ์ ๋ต์ ์ ํ๋ฆฌ์ผ์ด์ ์คํ๊ณผ ๋์์ GC๋ฅผ ์ํํ๊ฑฐ๋(๋์์ฑ GC) ์ฌ๋ฌ ์ค๋ ๋๋ฅผ ์ฌ์ฉํ์ฌ ๋ณ๋ ฌ๋ก GC๋ฅผ ์ํํ์ฌ(๋ณ๋ ฌ GC) ๊ฐ๋น์ง ์ปฌ๋ ์ ์ค๋จ์ ์ํฅ์ ์ค์ด๋ ๊ฒ์ ๋ชฉํ๋ก ํฉ๋๋ค.
- ๋์์ฑ ๊ฐ๋น์ง ์ปฌ๋ ์ (Concurrent Garbage Collection): ๊ฐ๋น์ง ์ปฌ๋ ํฐ๊ฐ ์ ํ๋ฆฌ์ผ์ด์ ๊ณผ ๋์์ ์คํ๋์ด ์ค๋จ ์๊ฐ์ ์ต์ํํฉ๋๋ค. ์ด๋ ์ผ๋ฐ์ ์ผ๋ก ์ ํ๋ฆฌ์ผ์ด์ ์ด ์คํ๋๋ ๋์ ๊ฐ์ฒด ๊ทธ๋ํ์ ๋ณ๊ฒฝ ์ฌํญ์ ์ถ์ ํ๊ธฐ ์ํด ์ฆ๋ถ ๋งํน ๋ฐ ์ฐ๊ธฐ ์ฅ๋ฒฝ(write barrier)๊ณผ ๊ฐ์ ๊ธฐ์ ์ ์ฌ์ฉํฉ๋๋ค.
- ๋ณ๋ ฌ ๊ฐ๋น์ง ์ปฌ๋ ์ (Parallel Garbage Collection): ๊ฐ๋น์ง ์ปฌ๋ ํฐ๋ ์ฌ๋ฌ ์ค๋ ๋๋ฅผ ์ฌ์ฉํ์ฌ ๋งํฌ ๋ฐ ์ค์ ๋จ๊ณ๋ฅผ ๋ณ๋ ฌ๋ก ์ํํ์ฌ ์ ์ฒด GC ์๊ฐ์ ์ค์ ๋๋ค.
์ฅ์ :
- ์ค๋จ ์๊ฐ ๊ฐ์: ๋์์ฑ ๋ฐ ๋ณ๋ ฌ GC๋ ๊ฐ๋น์ง ์ปฌ๋ ์ ์ค๋จ ์๊ฐ์ ํฌ๊ฒ ์ค์ฌ ๋ํํ ์ ํ๋ฆฌ์ผ์ด์ ์ ์๋ต์ฑ์ ํฅ์์ํฌ ์ ์์ต๋๋ค.
- ์ฒ๋ฆฌ๋ ํฅ์: ๋ณ๋ ฌ GC๋ ์ฌ๋ฌ CPU ์ฝ์ด๋ฅผ ํ์ฉํ์ฌ ๊ฐ๋น์ง ์ปฌ๋ ํฐ์ ์ ์ฒด ์ฒ๋ฆฌ๋์ ํฅ์์ํฌ ์ ์์ต๋๋ค.
๋จ์ :
- ๋ณต์ก์ฑ ์ฆ๊ฐ: ๋์์ฑ ๋ฐ ๋ณ๋ ฌ GC ์๊ณ ๋ฆฌ์ฆ์ ๋ ๊ฐ๋จํ ์ ๋ต๋ณด๋ค ๊ตฌํํ๊ธฐ๊ฐ ๋ ๋ณต์กํฉ๋๋ค.
- ์ค๋ฒํค๋: ์ด๋ฌํ ์ ๋ต์ ๋๊ธฐํ ๋ฐ ์ฐ๊ธฐ ์ฅ๋ฒฝ ์์ ์ผ๋ก ์ธํด ์ค๋ฒํค๋๋ฅผ ์ ๋ฐํฉ๋๋ค.
์์: Java์ CMS(Concurrent Mark Sweep) ๋ฐ G1(Garbage First) ์ปฌ๋ ํฐ๋ ๋์์ฑ ๋ฐ ๋ณ๋ ฌ ๊ฐ๋น์ง ์ปฌ๋ ํฐ์ ์์ ๋๋ค.
์ฌ๋ฐ๋ฅธ ๊ฐ๋น์ง ์ปฌ๋ ์ ์ ๋ต ์ ํํ๊ธฐ
์ ์ ํ ๊ฐ๋น์ง ์ปฌ๋ ์ ์ ๋ต์ ์ ํํ๋ ๊ฒ์ ๋ค์๊ณผ ๊ฐ์ ๋ค์ํ ์์ธ์ ๋ฐ๋ผ ๋ฌ๋ผ์ง๋๋ค:
- ํ๋ก๊ทธ๋๋ฐ ์ธ์ด: ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๋ ์ข ์ข ์ฌ์ฉ ๊ฐ๋ฅํ GC ์ ๋ต์ ๊ฒฐ์ ํฉ๋๋ค. ์๋ฅผ ๋ค์ด, Java๋ ์ฌ๋ฌ ๋ค๋ฅธ ๊ฐ๋น์ง ์ปฌ๋ ํฐ ์ค์์ ์ ํํ ์ ์๋ ๋ฐ๋ฉด, ๋ค๋ฅธ ์ธ์ด๋ ๋จ์ผ ๋ด์ฅ GC ๊ตฌํ์ ๊ฐ์ง ์ ์์ต๋๋ค.
- ์ ํ๋ฆฌ์ผ์ด์ ์๊ตฌ ์ฌํญ: ์ง์ฐ ์๊ฐ ๋ฏผ๊ฐ๋ ๋ฐ ์ฒ๋ฆฌ๋ ์๊ตฌ ์ฌํญ๊ณผ ๊ฐ์ ์ ํ๋ฆฌ์ผ์ด์ ์ ํน์ ์๊ตฌ ์ฌํญ์ GC ์ ๋ต ์ ํ์ ์ํฅ์ ๋ฏธ์น ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด, ๋ฎ์ ์ง์ฐ ์๊ฐ์ด ํ์ํ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋์์ฑ GC์ ์ด์ ์ ๋๋ฆด ์ ์๊ณ , ์ฒ๋ฆฌ๋์ ์ฐ์ ์ํ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ณ๋ ฌ GC์ ์ด์ ์ ๋๋ฆด ์ ์์ต๋๋ค.
- ํ ํฌ๊ธฐ: ํ์ ํฌ๊ธฐ๋ ๋ค๋ฅธ GC ์ ๋ต์ ์ฑ๋ฅ์๋ ์ํฅ์ ๋ฏธ์น ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด, ๋งํฌ ์ค ์ค์์ ๋งค์ฐ ํฐ ํ์์๋ ๋ ํจ์จ์ ์ผ ์ ์์ต๋๋ค.
- ํ๋์จ์ด: CPU ์ฝ์ด ์์ ์ฌ์ฉ ๊ฐ๋ฅํ ๋ฉ๋ชจ๋ฆฌ ์์ ๋ณ๋ ฌ GC์ ์ฑ๋ฅ์ ์ํฅ์ ๋ฏธ์น ์ ์์ต๋๋ค.
- ์์ ๋ถํ: ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ฉ๋ชจ๋ฆฌ ํ ๋น ๋ฐ ํด์ ํจํด๋ GC ์ ๋ต ์ ํ์ ์ํฅ์ ๋ฏธ์น ์ ์์ต๋๋ค.
๋ค์ ์๋๋ฆฌ์ค๋ฅผ ๊ณ ๋ คํด ๋ณด์ญ์์ค:
- ์ค์๊ฐ ์ ํ๋ฆฌ์ผ์ด์ : ์๋ฒ ๋๋ ์์คํ ์ด๋ ์ ์ด ์์คํ ๊ณผ ๊ฐ์ด ์๊ฒฉํ ์ค์๊ฐ ์ฑ๋ฅ์ด ํ์ํ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ค๋จ ์๊ฐ์ ์ต์ํํ๋ ์ฐธ์กฐ ์นด์ดํ ์ด๋ ์ฆ๋ถ GC์ ๊ฐ์ ๊ฒฐ์ ๋ก ์ GC ์ ๋ต์ ์ด์ ์ ๋๋ฆด ์ ์์ต๋๋ค.
- ๋ํํ ์ ํ๋ฆฌ์ผ์ด์ : ์น ์ ํ๋ฆฌ์ผ์ด์ ์ด๋ ๋ฐ์คํฌํฑ ์ ํ๋ฆฌ์ผ์ด์ ๊ณผ ๊ฐ์ด ๋ฎ์ ์ง์ฐ ์๊ฐ์ด ํ์ํ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ฐ๋น์ง ์ปฌ๋ ํฐ๊ฐ ์ ํ๋ฆฌ์ผ์ด์ ๊ณผ ๋์์ ์คํ๋์ด ์ฌ์ฉ์ ๊ฒฝํ์ ๋ฏธ์น๋ ์ํฅ์ ์ต์ํํ๋ ๋์์ฑ GC์ ์ด์ ์ ๋๋ฆด ์ ์์ต๋๋ค.
- ๊ณ ์ฒ๋ฆฌ๋ ์ ํ๋ฆฌ์ผ์ด์ : ๋ฐฐ์น ์ฒ๋ฆฌ ์์คํ ์ด๋ ๋ฐ์ดํฐ ๋ถ์ ์ ํ๋ฆฌ์ผ์ด์ ๊ณผ ๊ฐ์ด ์ฒ๋ฆฌ๋์ ์ฐ์ ์ํ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฌ๋ฌ CPU ์ฝ์ด๋ฅผ ํ์ฉํ์ฌ ๊ฐ๋น์ง ์ปฌ๋ ์ ํ๋ก์ธ์ค๋ฅผ ๊ฐ์ํํ๋ ๋ณ๋ ฌ GC์ ์ด์ ์ ๋๋ฆด ์ ์์ต๋๋ค.
- ๋ฉ๋ชจ๋ฆฌ ์ ์ฝ ํ๊ฒฝ: ๋ชจ๋ฐ์ผ ๊ธฐ๊ธฐ๋ ์๋ฒ ๋๋ ์์คํ ๊ณผ ๊ฐ์ด ๋ฉ๋ชจ๋ฆฌ๊ฐ ์ ํ๋ ํ๊ฒฝ์์๋ ๋ฉ๋ชจ๋ฆฌ ์ค๋ฒํค๋๋ฅผ ์ต์ํํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค. ๋ ๋ฐฐ์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ์๋ก ํ๋ ๋ณต์ฌ GC๋ณด๋ค ๋งํฌ ์ค ์ค์๊ณผ ๊ฐ์ ์ ๋ต์ด ๋ ์ ํธ๋ ์ ์์ต๋๋ค.
๊ฐ๋ฐ์๋ฅผ ์ํ ์ค์ฉ์ ์ธ ๊ณ ๋ ค์ฌํญ
์๋ ๊ฐ๋น์ง ์ปฌ๋ ์ ์ ์ฌ์ฉํ๋๋ผ๋ ๊ฐ๋ฐ์๋ ํจ์จ์ ์ธ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ๋ฅผ ๋ณด์ฅํ๋ ๋ฐ ์ค์ํ ์ญํ ์ ํฉ๋๋ค. ๋ค์์ ๋ช ๊ฐ์ง ์ค์ฉ์ ์ธ ๊ณ ๋ ค์ฌํญ์ ๋๋ค:
- ๋ถํ์ํ ๊ฐ์ฒด ์์ฑ ํผํ๊ธฐ: ๋ง์ ์์ ๊ฐ์ฒด๋ฅผ ์์ฑํ๊ณ ๋ฒ๋ฆฌ๋ ๊ฒ์ ๊ฐ๋น์ง ์ปฌ๋ ํฐ์ ๋ถ๋ด์ ์ฃผ์ด ์ค๋จ ์๊ฐ์ ๋๋ฆด ์ ์์ต๋๋ค. ๊ฐ๋ฅํ๋ฉด ๊ฐ์ฒด๋ฅผ ์ฌ์ฌ์ฉํ๋ ค๊ณ ๋ ธ๋ ฅํ์ญ์์ค.
- ๊ฐ์ฒด ์๋ช ์ต์ํ: ๋ ์ด์ ํ์ํ์ง ์์ ๊ฐ์ฒด๋ ๊ฐ๋ฅํ ํ ๋นจ๋ฆฌ ์ฐธ์กฐ๋ฅผ ํด์ ํ์ฌ ๊ฐ๋น์ง ์ปฌ๋ ํฐ๊ฐ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ์ํ ์ ์๋๋ก ํด์ผ ํฉ๋๋ค.
- ์ํ ์ฐธ์กฐ ์ธ์งํ๊ธฐ: ๊ฐ์ฒด ๊ฐ์ ์ํ ์ฐธ์กฐ๋ฅผ ์์ฑํ์ง ๋ง์ญ์์ค. ์ด๋ ๊ฐ๋น์ง ์ปฌ๋ ํฐ๊ฐ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ์ํ๋ ๊ฒ์ ๋ฐฉํดํ ์ ์์ต๋๋ค.
- ๋ฐ์ดํฐ ๊ตฌ์กฐ ํจ์จ์ ์ผ๋ก ์ฌ์ฉํ๊ธฐ: ์ฃผ์ด์ง ์์ ์ ์ ํฉํ ๋ฐ์ดํฐ ๊ตฌ์กฐ๋ฅผ ์ ํํ์ญ์์ค. ์๋ฅผ ๋ค์ด, ๋ ์์ ๋ฐ์ดํฐ ๊ตฌ์กฐ๋ก ์ถฉ๋ถํ ๊ฒฝ์ฐ ํฐ ๋ฐฐ์ด์ ์ฌ์ฉํ๋ฉด ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๋ญ๋นํ ์ ์์ต๋๋ค.
- ์ ํ๋ฆฌ์ผ์ด์ ํ๋กํ์ผ๋ง: ํ๋กํ์ผ๋ง ๋๊ตฌ๋ฅผ ์ฌ์ฉํ์ฌ ๊ฐ๋น์ง ์ปฌ๋ ์ ๊ณผ ๊ด๋ จ๋ ๋ฉ๋ชจ๋ฆฌ ๋์ ๋ฐ ์ฑ๋ฅ ๋ณ๋ชฉ ํ์์ ์๋ณํ์ญ์์ค. ์ด๋ฌํ ๋๊ตฌ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ด ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ด๋ป๊ฒ ์ฌ์ฉํ๋์ง์ ๋ํ ๊ท์คํ ํต์ฐฐ๋ ฅ์ ์ ๊ณตํ๊ณ ์ฝ๋๋ฅผ ์ต์ ํํ๋ ๋ฐ ๋์์ด ๋ ์ ์์ต๋๋ค. ๋ง์ IDE์ ํ๋กํ์ผ๋ฌ์๋ GC ๋ชจ๋ํฐ๋ง์ ์ํ ํน์ ๋๊ตฌ๊ฐ ์์ต๋๋ค.
- ์ธ์ด์ GC ์ค์ ์ดํดํ๊ธฐ: GC๊ฐ ์๋ ๋๋ถ๋ถ์ ์ธ์ด๋ ๊ฐ๋น์ง ์ปฌ๋ ํฐ๋ฅผ ๊ตฌ์ฑํ๋ ์ต์ ์ ์ ๊ณตํฉ๋๋ค. ์ ํ๋ฆฌ์ผ์ด์ ์ ์๊ตฌ์ ๋ฐ๋ผ ์ต์ ์ ์ฑ๋ฅ์ ์ํด ์ด๋ฌํ ์ค์ ์ ์กฐ์ ํ๋ ๋ฐฉ๋ฒ์ ๋ฐฐ์ฐ์ญ์์ค. ์๋ฅผ ๋ค์ด, Java์์๋ ๋ค๋ฅธ ๊ฐ๋น์ง ์ปฌ๋ ํฐ(G1, CMS ๋ฑ)๋ฅผ ์ ํํ๊ฑฐ๋ ํ ํฌ๊ธฐ ๋งค๊ฐ๋ณ์๋ฅผ ์กฐ์ ํ ์ ์์ต๋๋ค.
- ์คํํ(Off-Heap) ๋ฉ๋ชจ๋ฆฌ ๊ณ ๋ คํ๊ธฐ: ๋งค์ฐ ํฐ ๋ฐ์ดํฐ ์ธํธ๋ ์ค๋ ์ง์๋๋ ๊ฐ์ฒด์ ๊ฒฝ์ฐ, Java ํ ์ธ๋ถ์์ ๊ด๋ฆฌ๋๋ ๋ฉ๋ชจ๋ฆฌ์ธ ์คํํ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ์ ๊ณ ๋ คํ์ญ์์ค. ์ด๋ ๊ฐ๋น์ง ์ปฌ๋ ํฐ์ ๋ถ๋ด์ ์ค์ด๊ณ ์ฑ๋ฅ์ ํฅ์์ํฌ ์ ์์ต๋๋ค.
๋ค์ํ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์์์ ์์
๋ช ๊ฐ์ง ์ธ๊ธฐ ์๋ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์์ ๊ฐ๋น์ง ์ปฌ๋ ์ ์ด ์ด๋ป๊ฒ ์ฒ๋ฆฌ๋๋์ง ์ดํด๋ณด๊ฒ ์ต๋๋ค:
- Java: Java๋ ๋ค์ํ ์ปฌ๋ ํฐ(Serial, Parallel, CMS, G1, ZGC)๋ฅผ ๊ฐ์ถ ์ ๊ตํ ์ธ๋๋ณ ๊ฐ๋น์ง ์ปฌ๋ ์ ์์คํ ์ ์ฌ์ฉํฉ๋๋ค. ๊ฐ๋ฐ์๋ ์ข ์ข ์์ ์ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ฐ์ฅ ์ ํฉํ ์ปฌ๋ ํฐ๋ฅผ ์ ํํ ์ ์์ต๋๋ค. Java๋ ๋ํ ๋ช ๋ น์ค ํ๋๊ทธ๋ฅผ ํตํด ์ด๋ ์ ๋์ GC ํ๋์ ํ์ฉํฉ๋๋ค. ์์: `-XX:+UseG1GC`
- C#: C#์ ์ธ๋๋ณ ๊ฐ๋น์ง ์ปฌ๋ ํฐ๋ฅผ ์ฌ์ฉํฉ๋๋ค. .NET ๋ฐํ์์ด ์๋์ผ๋ก ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๊ด๋ฆฌํฉ๋๋ค. C#์ ๋ํ `IDisposable` ์ธํฐํ์ด์ค์ `using` ๋ฌธ์ ํตํด ๋ฆฌ์์ค์ ๊ฒฐ์ ๋ก ์ ํ๊ธฐ๋ฅผ ์ง์ํ์ฌ ํน์ ์ ํ์ ๋ฆฌ์์ค(์: ํ์ผ ํธ๋ค, ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฐ๊ฒฐ)์ ๋ํ ๊ฐ๋น์ง ์ปฌ๋ ํฐ์ ๋ถ๋ด์ ์ค์ด๋ ๋ฐ ๋์์ด ๋ ์ ์์ต๋๋ค.
- Python: Python์ ์ฃผ๋ก ์ฐธ์กฐ ์นด์ดํ ์ ์ฌ์ฉํ๋ฉฐ, ์ํ ์ฐธ์กฐ๋ฅผ ์ฒ๋ฆฌํ๊ธฐ ์ํด ์ํ ํ์ง๊ธฐ๋ก ๋ณด์๋ฉ๋๋ค. Python์ `gc` ๋ชจ๋์ ๊ฐ๋น์ง ์ปฌ๋ ์ ์ฃผ๊ธฐ๋ฅผ ๊ฐ์ ํ๋ ๋ฑ ๊ฐ๋น์ง ์ปฌ๋ ํฐ์ ๋ํ ์ผ๋ถ ์ ์ด๋ฅผ ํ์ฉํฉ๋๋ค.
- JavaScript: JavaScript๋ ๋งํฌ ์ค ์ค์ ๊ฐ๋น์ง ์ปฌ๋ ํฐ๋ฅผ ์ฌ์ฉํฉ๋๋ค. ๊ฐ๋ฐ์๊ฐ GC ํ๋ก์ธ์ค๋ฅผ ์ง์ ์ ์ดํ ์๋ ์์ง๋ง, ์๋ ๋ฐฉ์์ ์ดํดํ๋ฉด ๋ ํจ์จ์ ์ธ ์ฝ๋๋ฅผ ์์ฑํ๊ณ ๋ฉ๋ชจ๋ฆฌ ๋์๋ฅผ ํผํ๋ ๋ฐ ๋์์ด ๋ ์ ์์ต๋๋ค. Chrome ๋ฐ Node.js์์ ์ฌ์ฉ๋๋ V8 JavaScript ์์ง์ ์ต๊ทผ ๋ช ๋ ๋์ GC ์ฑ๋ฅ์ ํฌ๊ฒ ํฅ์์์ผฐ์ต๋๋ค.
- Go: Go๋ ๋์์ฑ, ์ผ์(tri-color) ๋งํฌ ์ค ์ค์ ๊ฐ๋น์ง ์ปฌ๋ ํฐ๋ฅผ ๊ฐ์ง๊ณ ์์ต๋๋ค. Go ๋ฐํ์์ด ์๋์ผ๋ก ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๊ด๋ฆฌํฉ๋๋ค. ์ค๊ณ๋ ๋ฎ์ ์ง์ฐ ์๊ฐ๊ณผ ์ ํ๋ฆฌ์ผ์ด์ ์ฑ๋ฅ์ ๋ํ ์ต์ํ์ ์ํฅ์ ๊ฐ์กฐํฉ๋๋ค.
๊ฐ๋น์ง ์ปฌ๋ ์ ์ ๋ฏธ๋
๊ฐ๋น์ง ์ปฌ๋ ์ ์ ์ฑ๋ฅ ํฅ์, ์ค๋จ ์๊ฐ ๋จ์ถ, ์๋ก์ด ํ๋์จ์ด ์ํคํ ์ฒ ๋ฐ ํ๋ก๊ทธ๋๋ฐ ํจ๋ฌ๋ค์์ ์ ์ํ๋ ๋ฐ ์ด์ ์ ๋ง์ถ ์ง์์ ์ธ ์ฐ๊ตฌ ๊ฐ๋ฐ์ด ์ด๋ฃจ์ด์ง๋ ์งํํ๋ ๋ถ์ผ์ ๋๋ค. ๊ฐ๋น์ง ์ปฌ๋ ์ ์ ์๋ก์ด ๋ํฅ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:
- ์์ญ ๊ธฐ๋ฐ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ (Region-Based Memory Management): ๊ฐ์ฒด๋ฅผ ์ ์ฒด์ ์ผ๋ก ํ์ํ ์ ์๋ ๋ฉ๋ชจ๋ฆฌ ์์ญ์ ํ ๋นํ์ฌ ๊ฐ๋ณ ๊ฐ์ฒด ํ์์ ์ค๋ฒํค๋๋ฅผ ์ค์ ๋๋ค.
- ํ๋์จ์ด ์ง์ ๊ฐ๋น์ง ์ปฌ๋ ์ (Hardware-Assisted Garbage Collection): ๋ฉ๋ชจ๋ฆฌ ํ๊น ๋ฐ ์ฃผ์ ๊ณต๊ฐ ์๋ณ์(ASID)์ ๊ฐ์ ํ๋์จ์ด ๊ธฐ๋ฅ์ ํ์ฉํ์ฌ ๊ฐ๋น์ง ์ปฌ๋ ์ ์ ์ฑ๋ฅ๊ณผ ํจ์จ์ฑ์ ํฅ์์ํต๋๋ค.
- AI ๊ธฐ๋ฐ ๊ฐ๋น์ง ์ปฌ๋ ์ (AI-Powered Garbage Collection): ๊ธฐ๊ณ ํ์ต ๊ธฐ์ ์ ์ฌ์ฉํ์ฌ ๊ฐ์ฒด ์๋ช ์ ์์ธกํ๊ณ ๊ฐ๋น์ง ์ปฌ๋ ์ ๋งค๊ฐ๋ณ์๋ฅผ ๋์ ์ผ๋ก ์ต์ ํํฉ๋๋ค.
- ๋ ผ๋ธ๋กํน ๊ฐ๋น์ง ์ปฌ๋ ์ (Non-Blocking Garbage Collection): ์ ํ๋ฆฌ์ผ์ด์ ์ ์ผ์ ์ค์งํ์ง ์๊ณ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ์ํ ์ ์๋ ๊ฐ๋น์ง ์ปฌ๋ ์ ์๊ณ ๋ฆฌ์ฆ์ ๊ฐ๋ฐํ์ฌ ์ง์ฐ ์๊ฐ์ ๋์ฑ ์ค์ ๋๋ค.
๊ฒฐ๋ก
๊ฐ๋น์ง ์ปฌ๋ ์ ์ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ๋ฅผ ๋จ์ํํ๊ณ ์ํํธ์จ์ด ์ ํ๋ฆฌ์ผ์ด์ ์ ์ ๋ขฐ์ฑ์ ํฅ์์ํค๋ ๊ธฐ๋ณธ ๊ธฐ์ ์ ๋๋ค. ๋ค์ํ GC ์ ๋ต, ๊ทธ ์ฅ๋จ์ ์ ์ดํดํ๋ ๊ฒ์ ๊ฐ๋ฐ์๊ฐ ํจ์จ์ ์ด๊ณ ์ฑ๋ฅ์ด ๋ฐ์ด๋ ์ฝ๋๋ฅผ ์์ฑํ๋ ๋ฐ ํ์์ ์ ๋๋ค. ๋ชจ๋ฒ ์ฌ๋ก๋ฅผ ๋ฐ๋ฅด๊ณ ํ๋กํ์ผ๋ง ๋๊ตฌ๋ฅผ ํ์ฉํจ์ผ๋ก์จ ๊ฐ๋ฐ์๋ ๊ฐ๋น์ง ์ปฌ๋ ์ ์ด ์ ํ๋ฆฌ์ผ์ด์ ์ฑ๋ฅ์ ๋ฏธ์น๋ ์ํฅ์ ์ต์ํํ๊ณ ํ๋ซํผ์ด๋ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์ ๊ด๊ณ์์ด ์ ํ๋ฆฌ์ผ์ด์ ์ด ์ํํ๊ณ ํจ์จ์ ์ผ๋ก ์คํ๋๋๋ก ๋ณด์ฅํ ์ ์์ต๋๋ค. ์ด๋ฌํ ์ง์์ ์ ํ๋ฆฌ์ผ์ด์ ์ด ๋ค์ํ ์ธํ๋ผ์ ์ฌ์ฉ์ ๊ธฐ๋ฐ์ ๊ฑธ์ณ ์ผ๊ด๋๊ฒ ํ์ฅ๋๊ณ ์ฑ๋ฅ์ ๋ฐํํด์ผ ํ๋ ๊ธ๋ก๋ฒํ๋ ๊ฐ๋ฐ ํ๊ฒฝ์์ ์ ์ ๋ ์ค์ํด์ง๊ณ ์์ต๋๋ค.